/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package caintra.Sapra.Pantalla.Dispersion;

import caintra.Sapra.Model.Practicante;
import caintra.Sapra.Model.PrefacturaDetalle;



/**
 *
 * @author ppratsc
 */
public class RFC {

    public static String ProcessRFC(PrefacturaDetalle px){
        boolean resp = true;
        Practicante p=new Practicante();
        p.setNombre(px.getNombre());
        p.setPaterno(px.getPaterno());
        p.setMaterno(px.getMaterno());
        p.setFec_nacimiento(px.getFec_nacimiento());
        try {
            p.setNombre(corrector(p.getNombre().trim()));
            p.setPaterno(corrector(p.getPaterno().trim()));
            p.setMaterno(corrector(p.getMaterno().trim()));
            if(p.getNombre()==null || p.getPaterno()==null ||p.getMaterno()==null){
                return "";
            }
            p.setRfc("");
            enie(1,p);
            vocales(p,0);
            enie(2,p);
            compuesto(p);
            fecha(p);
        }catch(Exception ex){
            return "";
        }
        return p.getRfc();
    }

    public static void enie(int op,Practicante p){
		char m = 0;
                String apellidos = p.getPaterno()+" "+p.getMaterno();
		String x[]=apellidos.split(" ");
		if(op==1)
			m=x[0].charAt(0);
		if(op==2){
			m=x[x.length-1].charAt(0);
		}p.getRfc();
		if((m>=65 && m<=90) || ( m>=97 && m<=122 )){
			//rfc=rfc+m;
			p.setRfc(p.getRfc()+m);
		}
		else{
			//rfc=rfc+"X";
			p.setRfc(p.getRfc()+"X");
		}
	}


	public static void vocales(Practicante p,int count){
            String apellidos = p.getPaterno()+" "+p.getMaterno();
            String x[]=apellidos.split(" ");
		String cadena=x[0];
		if(count==0){
			for(int i=1;i<cadena.length();i++){
					char valor;
					valor=cadena.charAt(i);
					if(count==0){
						switch(valor){
						case 'A':p.setRfc(p.getRfc()+valor);count=1;vocales(p,1);break;//rfc=rfc+valor;cont=1;break;
						case 'E':p.setRfc(p.getRfc()+valor);count=1;vocales(p,1);break;//rfc=rfc+valor;cont=1;break;
						case 'I':p.setRfc(p.getRfc()+valor);count=1;vocales(p,1);break;//rfc=rfc+valor;cont=1;break;
						case 'O':p.setRfc(p.getRfc()+valor);count=1;vocales(p,1);break;//rfc=rfc+valor;cont=1;break;
						case 'U':p.setRfc(p.getRfc()+valor);count=1;vocales(p,1);break;//rfc=rfc+valor;cont=1;break;
					}
					}


			}
		}
		if(count==0)
			p.setRfc(p.getRfc()+"X");//rfc=rfc+"X";

	}


	public static void compuesto(Practicante p){
		//Logger l=Logger.getLogger("...");
		String a[]=p.getNombre().split(" ");

		char x='0';

		if(a[0].equals("MARIA")||a[0].equals("MA.")||a[0].equals("JOSE")||a[0].equals("J.J.")){
				x=a[a.length-1].charAt(0);
				p.setRfc(p.getRfc()+x);//rfc=rfc+x;
		}
		else{
			try{
				x=a[0].charAt(0);
				p.setRfc(p.getRfc()+x);//rfc=rfc+x;
			}
			catch(Exception e){
				//System.out.println(p.getPracticanteId()+""+a[0]);
				//l.log(Level.SEVERE,p.getPracticanteId()+""+a[0] );
			}
		}
	}


	public static void fecha(Practicante p){//860103
		String a[]=p.getFec_nacimiento().toString().split("-");
		String x=p.getRfc()+a[0].substring(2,4)+a[1]+a[2];
		p.setRfc(x);
	}

	public static String corrector(String s){
		//String prueba="ÑHernández-Mo123rán J12osué Wilfrido";
 		//áéíóú
                s=s.toLowerCase();
 		s=s.replace('Ñ', 'N').replace('á', 'A').replace('é', 'E').replace('í', 'I').replace('ñ','n');
 		s=s.replace('ó','O').replace('ú', 'U');
 		s=s.toUpperCase();
 		s=s.trim();

 		String cad="";
 		for(int i=0;i<s.length();i++){
 			char m=s.charAt(i);
 			if(m==' ' || m=='-'){
 				cad=cad+" ";
 			}
 			else{
 				if((m>=65 && m<=90) || ( m>=97 && m<=122 ))
 					cad=cad+m;
                                else{
                                    return null;
                                }
 			}
 		}
 		s=cad;


		return s;
	}
}
